reserved_region[].start is of virtual address in identity
mapping. not physical address.
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
n++;
#ifdef CONFIG_XEN
- rsvd_region[n].start = (unsigned long) (HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT);
- rsvd_region[n].end = rsvd_region[n].start + PAGE_SIZE;
- n++;
+ if (running_on_xen) {
+ rsvd_region[n].start = (unsigned long)__va((HYPERVISOR_shared_info->arch.start_info_pfn << PAGE_SHIFT));
+ rsvd_region[n].end = rsvd_region[n].start + PAGE_SIZE;
+ n++;
+ }
#endif
#ifdef CONFIG_BLK_DEV_INITRD
n++;
num_rsvd_regions = n;
+ BUG_ON(IA64_MAX_RSVD_REGIONS + 1 < n);
sort_regions(rsvd_region, num_rsvd_regions);
}
* - command line string
* - kernel code & data
* - Kernel memory map built from EFI memory map
+ * - xen start info
*
* More could be added if necessary
*/
+#ifndef CONFIG_XEN
#define IA64_MAX_RSVD_REGIONS 6
+#else
+#define IA64_MAX_RSVD_REGIONS 7
+#endif
struct rsvd_region {
unsigned long start; /* virtual address of beginning of element */